import { AutoMap } from "@automapper/classes";
import { Role } from "@/enums";
import { ApiProperty } from "@nestjs/swagger";

export class ReadAccountDTO {
    @ApiProperty({
        type: Number,
        description: "Идентификатор учетной записи",
        example: 1
    })
    @AutoMap()
    id: number;

    @ApiProperty({
        type: String,
        description: "Имя (логин) учетной записи, должно быть уникальным",
        example: "admin"
    })
    @AutoMap()
    userName: string;

    @ApiProperty({
        type: String,
        description: "Имя пользователя",
        example: "Иван"
    })
    @AutoMap()
    firstName: string;

    @ApiProperty({
        type: String,
        description: "Фамилия пользователя",
        example: "Иванов"
    })
    @AutoMap()
    lastName: string;

    @ApiProperty({
        type: String,
        description: "Электронная почта пользователя, должна быть уникальной",
        required: true,
        example: "ivan.ivanov@example.ru"
    })
    @AutoMap()
    email: string;

    @ApiProperty({
        type: [Role],
        enum: Role,
        description: "Список ролей учетной записи",
        example: [Role.Student],
        required: true
    })
    @AutoMap()
    roles: Role[];

    @ApiProperty({
        type: Boolean,
        description: "Флаг, который показывает, нужно ли сменить на учетной записи пароль",
        example: true
    })
    @AutoMap()
    needChangePassword: boolean;

    @ApiProperty({
        type: Boolean,
        description: "Флаг, который показывает, заблокирована ли учетная запись",
        example: false
    })
    @AutoMap()
    isBlocked: boolean;

    @ApiProperty({
        type: String,
        description: "Дата и время создания учетной записи в формате ISO 8601",
        example: "2023-12-15T09:25:41.600Z"
    })
    @AutoMap()
    createdAt: Date;

    @ApiProperty({
        type: String,
        description: "Дата и время изменения учетной записи в формате ISO 8601",
        example: "2023-12-15T09:25:41.600Z"
    })
    @AutoMap()
    updatedAt: Date;
}

export class ReadAccountListDTO {
    @ApiProperty({ type: Number, description: "Общее количество учетных записей" })
    total: number;

    @ApiProperty({ type: [ReadAccountDTO], description: "Список учетных записей" })
    accounts: Array<ReadAccountDTO>;
}
